#include <REGX52.H>
#include "Delay.h"
/*数码管可显示值*/
unsigned int ShuMaGuan_EnableDisplayValue[]={
	0,1,2,3,4,
	5,6,7,8,9,
	'A','C','E','F','H',
	'J','L','P','q','U',
	'.','b','d','u','-'};
/*数码管显示值对应的HEX*/
unsigned int ShuMaGuan_EnableDisplayHEX[]={
	0x3F,0x06,0x5B,0x4F,0x66,
	0x6D,0x7D,0x07,0x7F,0x6F,
	0x77,0x39,0x79,0x71,0x76,
	0x1E,0x38,0x73,0x67,0x3E,
	0x80,0x7C,0x5E,0x1C,0x40};
/**
 * 函    数：获取可显值对应的HEX
 * 参    数：数码管显示的值
 * 返 回 值：数码管显示时对应的HEX
 */
unsigned int ShuMaGuan_GetEnableDisplayValueOfHEX(unsigned int Value)
{
	unsigned int index=0;
	for(index=0;index<24;index++)//遍历显示值的数组
	{
		if(ShuMaGuan_EnableDisplayValue[index]==Value)//找到对应值的索引
		{
			break;
		}
	}
	return ShuMaGuan_EnableDisplayHEX[index];
}
/**
 * 函    数：设置数码管要显示的值
 * 参    数：显示值
 * 返 回 值：无
 */
void ShuMaGuan_SetDisplayValue(unsigned int Value)
{
	/*将要显示的值 复制给P0*/
	P0=ShuMaGuan_GetEnableDisplayValueOfHEX(Value);
}
/**
 * 函    数：设置要显示的数码管 位置
 * 参    数：位置（左起1-8）
 * 返 回 值：无
 */
void ShuMaGuan_SetDisplayLocation(unsigned int Location)
{
	switch(Location)		//位码输出
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
}
/**
 * 函    数：数码管展示
 * 参    数：Location 显示的位置，Value 显示的值
 * 返 回 值：无
 */
void ShuMaGuan_Display(unsigned int Location,unsigned int Value)
{
	/*显示位置*/
	ShuMaGuan_SetDisplayLocation(Location);
	/*显示值*/
	ShuMaGuan_SetDisplayValue(Value);
	/*等待显示稳定*/
	Delay_10us(10);
	/*消除阴影*/
	P0=0x00;
}
/**
 * 函    数：显示一个数字 
 * 参    数：整形数字 -32767到32767
 * 返 回 值：无
 */
void ShuMaGuan_ShowNumber(int Num)
{
	int Location=8,Temp,Flag=1;
	if(Num<0)
	{
		Num=-Num;//再将负数转为正数
		Flag=-1;//表示需要显示‘负号-’
	}
	else if(Num==0){
		ShuMaGuan_Display(Location,Num); 
	}
	
	Temp=Num%10;
	while(Location>0&&Num>0)
    {
		ShuMaGuan_Display(Location,Temp); 
		Location--;
		Num=Num/10;
		Temp=Num%10;
    }	
	if(Flag==-1&&Location>0)
	{
		ShuMaGuan_Display(Location,'-');//负数显示负号 
	}
}